1. Field of the Invention
This invention relates to computer systems and, more particularly, to the management of striping, concatenation and mirroring within storage virtualization environments.
2. Description of the Related Art
Many business organizations and governmental entities rely upon applications that access large amounts of data, often exceeding a terabyte or more of data, for mission-critical applications. Often such data is stored on many different storage devices, which may be heterogeneous in nature, including many different types of devices from many different manufacturers.
Configuring individual applications that consume data, or application server systems that host such applications, to recognize and directly interact with each different storage device that may possibly be encountered in a heterogeneous storage environment would be increasingly difficult as the environment scaled in size and complexity. Therefore, in some storage environments, specialized storage management software and hardware may be used to provide a more uniform storage model to storage consumers. Such software and hardware may also be configured to add storage features not present in individual storage devices to the storage model. For example, features to increase fault tolerance, such as data mirroring, snapshot/fixed image creation, or data parity, as well as features to increase data access performance, such as disk striping or concatenation, may be implemented in the storage model via hardware or software.
For certain kinds of storage applications, it may be desirable to utilize both data mirroring and disk striping in order to achieve both enhanced performance and enhanced reliability. For example, it may be desirable to stripe application data across a first set of physical disks, and to then mirror the entire first set of physical disks at a second set of physical disks. In order to represent the logical relationships between the data residing on various disks in such a configuration, a hierarchical (e.g., tree-structured) data structure may be employed, where each node of the hierarchy may contain pointers to and metadata about underlying storage objects (e.g., mirrors and/or stripes). However, the use of a hierarchical data structure may have disadvantages, especially for large, complex hierarchies. Frequent traversals of the hierarchy may be required, which may lead to excessive use of processing and/or memory resources. Furthermore, if I/O errors are handled on a per-mirror basis (i.e., if an entire mirror is designated as either on-line or disabled), under some circumstances more storage than necessary may be made inaccessible if an I/O error occurs. For example, when an error is encountered at a single disk that forms part of a striped mirror, the whole mirror (potentially including a large number of disks that remain error-free) may have to be disabled, because the hierarchical data structure may not provide an efficient mechanism for disabling the single disk at which the error occurred while allowing I/O operations at the remaining disks to continue. It may be desirable to represent mirroring and striping using a single flat (i.e., non-hierarchical) data structure that allows flexible configuration of mirrored and/or striped sub-ranges of storage and supports an efficient way of identifying and disabling only those storage devices of a striped mirror where an error may have occurred.